Elementos da Aula
- Introdução ao RStudio
- As janelas de navegação do RStudio
- Operações matemáticas básicas
- Funcionamento básico de uma função
- Criação de objetos
- Operações com vetores
- Classes de objetos
- Dicas do RStudio
- Lista de Exercícios
1. Introdução ao RStudio
- O RStudio é uma interface usada para facilitar a sua vida ao utilizar a linguagem R.
- Ele não é o R em si!
- Outras opções existem, como o Tinn-R e o Microsoft R.
- A interface gráfica básica do RStudio.
2. As janelas de navegação do RStudio
O Console
- É a janela de execução do R, similar a abrir somente o programa base do R.
- Nesta área você encontra:
- O console do R;
- A versão do R que está sendo executada;
- O diretório de trabalho da sessão.
O Projeto
- Podemos organizar todo o trabalho que estamos fazendo ao redor de um projeto.
- Um projeto vai conter todos os arquivos, scripts e figuras necessários para realizarmos uma tarefa (manuscrito, dissertação, tese, análise,…).
- Existem muitas vantagens em se iniciar um projeto para cada tarefa que estamos fazendo - uma delas é que o diretório utilizado para carregar e salvar arquivos fica sendo consistente entre qualquer computador em que você utilizar o projeto.
O Script
- É sempre bom escrevermos o código que queremos usar em uma tarefa em um script e, a partir dele, enviar os comandos para o console.
- Um script pode conter o código e anotaçõees utilizadas para gerar qualquer tipo de computação.
- Sempre use um script para manter o registro de tudo o que você está fazendo ao realizar uma tarefa.
- Nesta área você encontra:
- A janela do script;
- O botão Run, usado para enviar o comando do script ao console;
- Um botão para salvar o script em um diretório de sua escolha (ou salvar as alteraçõeses feitas nele);
- Um botão de busca e/ou substituição;
- Uma aba para facilitar a navegação entre as partes (“capítulos”) do seu script.
Outras funcionalidades presentes do RStudio
- Aqui estão concentradas algumas funcionalidades importantes do RStudio e do R.
- Aba “Files”
- Contém todos os arquivos em um diretório;
- O “..” na primeira linha pode ser utilizado para mover ao diretório acima do qual você observa;
- Ainda na aba “Files”, existem botõees que você pode usar para:
- Criar uma nova pasta em um diretório (“New folder”);
- Deletar um arquivo ou pasta (“Delete”);
- Renomear um arquivo ou pasta (“Rename”).
- Toda vez que você criar uma figura, ela será apresentado na aba “Plots”; você pode salvar as figura diretamente a partir da aba, mas existem outras formas muito mais adequadas de fazer isso.
- A partir da aba “Packages” você pode instalar, atualizar, carregar e/ou acessar o conteúdo de um pacote.
- Todo e qualquer arquivo de ajuda de uma função ou pacote é apresentado e descrito na aba “Help”.
3. Operações matemáticas básicas
- O R pode ser usado para fazer operações matemáticas básicas:
5 + 5 # soma
10 - 5 # subtração
10 / 2 # divisão
5 * 2 # multiplicação
15^(1/3) # raiz cubica
5^2 # elevar a um expoente
15 %/% 2 # número inteiro de uma divisão
pi # valor de pi
4. Funcionamento básico de uma função
- Uma função representa um conjunto de ações que devem ser feitas para originar um resultado, e são os blocos fundamentais do R: toda e qualquer tarefa é realizada através delas;
- Toda função é composta por um ou mais argumentos, que controlam e/ou determinam o que a função faz e como ela deve se comportar;
- Um argumento são valores ou opções necessárias para a execução de uma função.
- Por exemplo, muitas das funções que realizam operações matemáticas recebem apenas um ou dois argumentos.
abs(x = -5) # valor absoluto
exp(x = 2.70805) # exponencial
sqrt(x = 15) # raiz quadradra
factorial(x = 5) # fatorial: 5!
cos(x = 73) # coseno
sin(x = 92) # seno
tan(x = 3) # tangente
asin(x = 0.8) # arcoseno
log(x = 15, base = 2.70805) # log
choose(n = 5, k = 2) # combinações: retirar k elementos de n possibilidades
- Mas muitas funções existentes no R recebem um número muito maior de argumentos, que não são necessariamente valores numéricos.
## um exemplo
?install.packages
## ou
help("install.packages")
- Nem todos os argumentos presentes em uma função precisam ser especificados quando nós à utilizamos, pois argumentos argumentos podem ter sido pré-especificados quando da criação da função, enquanto outros simplesmente não afetam o funcionamento de uma função.
## um exemplo
?read.table
- Além disso, quando você usar uma função, você pode especificar seus argumentos por posição, nome completo ou nome parcial. Ou seja:
# por nome completo
read.table(file = "nome_do_arquivo", header = TRUE, sep = ",")
# por posição
read.table("nome_do_arquivo", TRUE, ",")
# por nome parcial
read.table("nome_do_arquivo", head = TRUE, ",")
Exercício 1
- Instale os pacotes
readr e readxl.
5. Criação de objetos
- Podemos criar uma função através de uma outra função, chamada
function.
## uma função para calcular a riqueza de espécies em uma ilha qualquer: S = c.a^z
function(a = 1.2) {
2 * a ^ 0.4
}
- Todavia, para que possamos extrair algo de útil dela é importante que a coloquemos em um objeto, utilizando o operador
<-.
riqueza <- function(a = 1.2) {
2 * a ^ 0.4
}
- Agora podemos descobrir o valor da riqueza em espécies para a ilha com área de 1.2 km².
riqueza()
## [1] 2.151308
Exercício 2
- E se nós quiséssemos determinar o valor da riqueza em espécies para uma ilha com 64.38km²? O que poderíamos fazer com a função para obtermos o valor esperado?
- Caso nós quiséssemos que esta equação pudesse ser empregada para outros grupos de ilhas, onde os valores de c e de z diferem daqueles na função, que modificações poderíamos fazer à função existente?
- A maior vantagem de criarmos um objeto está em sua utilidade de atuar como um ‘atalho’ para uma ou várias ações que desenvolvemos em uma sessão.
## somando dois numeros
soma <- 5 + 5
soma
## [1] 10
## elevando a soma ao quadrado
soma ^ 2
## [1] 100
Exercício 3
- Qual o valor esperado para a operação 3 +
soma ^ 2?
- O que acontece quando você atribui o resultado desta última operação ao mesmo objeto chamado
soma e, em seguida, repete a operação acima? Por que isso acontece?
- Utilize a função
rm(soma) e, em seguida, repita a operação do item 1. O que aconteceu? Por que isso aconteceu?
Algumas regras e padrões observados ao usarmos funções e objetos
- Sobre a criação de objetos:
- Você só precisa definir uma única vez um nome para um objeto/valor/tarefa/ação;
- Todo objeto criado é salvo no ambiente da sessão;
- Cada objeto criado ocupa um espaço e ‘come’ poder de processamento;
- Sobre-escrever um objeto por outro substitui a informação que existia anteriormente;
- Sobre-escrever o nome de uma função por um objeto não apaga a função e seu conteúdo, apenas faz com que o seu uso necessite de operadores especiais para que ela seja buscada no ambiente correto.
- Algumas dicas:
- Não há como o primeiro caractere do nome de um objeto ser um número;
- Evite sobre-escrever objetos o máximo que você puder, para evitar comportamentos e resultados inesperados durante uma sessão;
- Evite nomear um objeto usando o nome de função já existente - você pode não conseguir usar outras funções que dependam a função em questão;
- Não use espaços em branco no nome de um objeto, opter por usar o ponto ou o underscore para separar palavras: e.g.
resultado_anova ou resultado.anova
- Evite nomes longos para nomear um objeto: e.g.
resultado_da_anova_removendo_os_sites_com_os_singletons
- Evite nomes de objetos que sejam pouco informativos: e.g.
analise
- Sobre as principais fontes de erro no seu código: você é o seu pior inimigo!
- Erros de digitação ao chamar um objeto ou função (e.g.,
read.tab1e ou readtable ao invés de read.table);
- Esquecer de criar um objeto antes de rodar uma função;
- Especificar um argumento que não existe na função;
- Especificar o argumento certo de forma errada (adicionar um número onde na realidade deveria ser algo como VERDADEIRO/FALSO);
- Especificar o argumento certo mas com o tipo de objeto errado (como veremos, existem muitos tipos de objetos no ambiente R);
- Misturar letras e números no mesmo tipo de objeto (veremos mais isso ao longo do curso).
- Algumas dicas de boas práticas para evitar erros:
- Apague objetos que você não vá usar mais em uma sessão -
rm(objeto);
- Evite salvar a área de trabalho ao sair do R (casos especiais justificam salvá-lo);
- Ao iniciar uma sessão, limpe tudo que está no ambiente global do R -
rm(list = ls(all = TRUE));
- Use a ferramenta de auto-completar do RStudio: comece a escrever o nome da função que você deseja, aperte
Tab e navegue pelas opções através das setas;
- Na dúvida também sobre os argumentos que existem em uma função? Dentro do parenteses que descreve seus argumentos, pressione
Tab, navegue pela lista de argumentos e veja uma pequena descrição do que cada um deles deve ser.
Você sabe a diferença entre um error, warning e uma message?
error: uma indicação de que um problema fatal ocorreu, levando à parada da execução da função;
warning: uma indicação de que algo de errado aconteceu, mas que não é necessariamente fatal - desta forma, a execução da função prossegue;
message: uma mensagem ou notificação genérica, que não tem haver com um erro ou problema na execução da função - tudo ocorre de forma natural.
error vs warning vs message:
- ordem de perigo:
warning > message > error (melhor não fazer, do que fazer mal feito).
- ordem de desespero de alguém que está iniciando:
warning = message = error.
6. Operações com vetores
- Muitas das operações realizadas pelas funções no R são orientadas a vetores, que são um tipo de objeto com apenas uma dimensão.
- Um vetor com qualquer tipo de informação pode ser criado através da função
c (abreviação para concatenar).
## um vetor com números
c(3, 7, 10, 12)
## [1] 3 7 10 12
## um vetor com palavras
c("RJ", "SP", "ES", "MG")
## [1] "RJ" "SP" "ES" "MG"
- Podemos criar vetores utilizando algumas facilidades e funções presentes no R.
## uma sequencia de numeros de 1 a 100
1:100
## outra forma de criar esta mesma sequencia de numeros
seq(from = 1, to = 100, by = 1)
- Podemos atribuir os valores armazenados em um vetor a um objeto, o que facilita o seu uso para operações futuras.
## o vetor com números será atribuído ao objeto numeros
numeros <- 1:100
numeros
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
## [18] 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
## [35] 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
## [52] 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
## [69] 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
## [86] 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
## criaremos o vetor com as siglas dos estados, mas incluiremos um parenteses extra para que o vetor seja impresso assim que criado
(estados <- c("RJ", "SP", "ES", "MG"))
## [1] "RJ" "SP" "ES" "MG"
Exercício 4
- Crie uma sequência de números que vá de 1000 até 555, nesta ordem. Armazene este vetor em um objeto.
- Crie uma sequência de números ímpares de 1 a 100. Armazene este vetor em um objeto.
- Crie uma sequência de números pares de 1 a 20. Armazene este vetor em um objeto chamado
pares.
- Muitas das operações que fizemos até aqui podem ser feitas também com vetores.
log(numeros)
sqrt(numeros)
numeros * 2
numeros + 10
- Inclusive podemos fazer operações utilizando dois ou mais vetores.
vetor1 <- c(1, 3, 5, 7, 9)
vetor2 <- c(-3, -10, 7, 4, 20)
vetor1 + vetor2
## [1] -2 -7 12 11 29
Exercício 5
- Utilize a função
rnorm para criar uma sequência com 5 números e atribua o resultado a um objeto.
- Crie uma um vetor com dois elementos: o número 0 e o número 1, e atribua este valor a um outro objeto.
- Multiplique o vetor do item 1 pelo vetor do item 2. O que acontece?
7. Classes de objetos
- Um aspecto importante do funcionamento das funções no R é que cada um dos argumentos que encontramos nelas normalmente aceita objetos de uma único classe.
numeric, integer e double são objetos que representam números;
character são objetos que representam letras e palavras;
logical são objetos que representam operadores lógicos, como TRUE ou FALSE.
class(x = numeros)
class(x = c(3.6, 2.1, 2.2))
class(x = estados)
class(x = c(T, F, T, F))
- O R também possui alguns tipos especiais de classe de objetos, como os fatores. Esta classe de objetos é bastante importante quando utilizamos algumas análises estatísticas e também ao criar figuras.
factor(x = estados) # transformando o vetor estados em um fator
factor(x = c(3.6, 2.1, 2.2, 2.1, 2.2, 3.6, 4)) # transformando um vetor de numeros em um fator
ordered(x = c(3.6, 2.1, 2.2, 2.1, 2.2, 3.6, 4)) # transformando um vetor de numeros em um fator ordenado
- Podemos perguntar ao R se um objeto pertence a uma classe específica de objeto.
is.numeric(x = numeros)
is.integer(x = numeros)
is.character(x = numeros)
is.logical(x = numeros)
- Ou podemos fazer a mesma pergunta de forma genérica.
str(object = numeros)
## int [1:100] 1 2 3 4 5 6 7 8 9 10 ...
class(x = numeros)
## [1] "integer"
Exercício 6
- Crie um vetor contendo dois argumentos lógicos, utilizando as aspas ao designar cada elemento desse vetor; em seguida, determine a que classe pertence esse objeto. Repita o mesmo procedimento sem usar as aspas.
- Crie um vetor contendo um número, um caractere/palavra e um argumento lógico. A que classe de objeto ele pertence?
- Crie um vetor contendo um número e um argumento lógico. A que classe de objeto ele pertence?
- Crie um vetor contendo um caractere e um argumento lógico. A que classe de objeto ele pertence?
- Determinar a que classe de objeto pertence um vetor ou seus elementos pode ser útil para detectar problemas em uma operação que você faça ou, ainda, para realizar operações matemáticas.
sqrt(-2) # NaN
1/0 # Inf
- Alguns elementos de um objeto podem assumir valores específicos e importantes:
NA para definir um valor que não está disponível (“__N__ot __A__vailable“”);
NaN para definir um valor que não é número (“__N__ot a __N__umber“);
Inf para definir um valor infinito.
- Podemos perguntar para o R se algum elemento de um vetor pertença a uma daqueles três classes.
is.na(x = c(3, 5, NA, 2))
## [1] FALSE FALSE TRUE FALSE
is.nan(x = c(1, NaN, 9, 4))
## [1] FALSE TRUE FALSE FALSE
is.infinite(x = c(Inf, 0, -10, Inf))
## [1] TRUE FALSE FALSE TRUE
- Note que aqui estamos perguntando se um ou mais elementos de um vetor pertencem à cada uma daquelas classes. Como resultado, temos um novo vetor da classe lógico, que marca como TRUE as posições dos elementos que correspondem ao teste feito.
- Uma das vantagens de termos um vetor lógico como resposta de uma operação é que isto nos permite utilizar este vetor em operações matemáticas.
## quantos valores NA existem nesse vetor?
sum(is.na(x = c(3, 5, NA, 2)))
## [1] 1
- Veremos mais sobre o uso de testes lógicos como esses e similares em outras aulas.
Exercício 7
- O que acontece quando usamos a expressão
sum(!is.na(c(3, 5, NA, 2)))? O que esse valor representa?
- Simule 100 números aleatórios que sigam uma distribuição normal, e que tenham média 0 e desvio padrão 5. Tire o log dos elementos deste vetor e responda: quantos valores existem de fato deste vetor (isto é, não são
NA, nem NaN e nem Inf. Utilize um seed de 33 para essa simulação.
8. Algumas dicas do RStudio
- Use sempre um projeto para organizar os seus scripts;
- Organize seu script em “capítulos” - para isso, utilize o atalho do teclado:
Command + Shift + r no MAC ou Control + Shift + r no Windows;
- Adicione comentários ao seu script sempre que puder, através do
#.
- Ao invés de ficar pressionando o botão
Run para enviar os comandos do script para o console, utilize Command + Enter no MAC ou Control + Enter no Windows;
- Para ver os últimos comandos lançados no console, coloque o cursor lá e utilize
Command + Seta para cima no MAC ou Control + Seta para cima no Windows;
- Na dúvida sobre uma função? Coloque o curso em cima dela (no console ou no script) e pressione
Function + F1 no MAC ou F1 no Windows;
- Quer apagar tudo que está escrito no seu console? Use
Control + L no MAC ou no Windows.